// #include <USCI.h>

// // 选择三合一模式(只做了Uart0)
// #define Uart0 0
// #define TWI0 1
// #define SPI0 2

// #define USCI0_Mode Uart0

// #define time_out 4000

// uint8_t Uart0SendFlag = 0;
// uint8_t Uart0ReceiveFlag = 0;
// uint8_t BUF_TEMP[BUF_SIZE];
// uint8_t BUF_POINTER_BEGIN = 0;
// uint8_t BUF_POINTER_END = 0;
// uint8_t Uart0_baud = 0;

// void Delay(uint8_t time)
// {
//     while (time--)
//         ;
// }

// /**
//  * @brief Uart0初始化，使用定时器1作为时钟源
//  *
//  * @param Freq
//  * @param baud
//  * @return 成功初始化，返回真
//  */
// bool Uart0_Init(uint16_t Freq, uint32_t baud)
// {
//     // Uart0对应输出口 P05 P06 控制
//     // 设置 P05 P06 为输入模式
//     P0CON &= 0x9F; // x00x xxxx b
//     // 设置 P05 P06 上拉电阻 打开
//     P0PH |= 0x60; // x11x xxxx b
//     // 串行接口USCI0选择Uart0
//     OTCON |= 0x30; // xx11 xxxx b
//     // UART T通信模式1：10位全双工串口通信，允许接收
//     US0CON0 = 0x50; // 0101 0000 b
//     // 波特率
//     US0CON1 = Freq * 1000000 / baud;        // 低位
//     US0CON2 = (Freq * 1000000 / baud) >> 8; // 高位
//     // 开启USCI0中断
//     IE1 |= 0x01;
//     // 开启总中断
//     EA = 1;
//     return true;
// }

// uint8_t Uart0_BufAvailable()
// {
//     return (BUF_POINTER_END + BUF_SIZE - BUF_POINTER_BEGIN) % BUF_SIZE;
// }

// bool Uart0_BufOverflow()
// {
//     if (Uart0_BufAvailable() >= BUF_SIZE)
//     {
//         return true;
//     }
//     return false;
// }

// bool Uart0_SendByte(const uint8_t byte)
// {
//     uint16_t count = 0;
//     US0CON3 = byte;
//     while (!Uart0SendFlag)
//     {
//         count++;
//         if (count > time_out)
//         {
//             return false;
//         }
//     }
//     Uart0SendFlag = 0;
//     return true;
// }

// bool Uart0_SendString(uint8_t *str)
// {
//     while (*str)
//     {
//         if (!Uart0_SendByte(*str))
//         {
//             return false;
//         }
//         str++;
//     }
//     return true;
// }

// bool Uart0_ReceiveString(uint8_t **str)
// {
//     uint8_t i;
//     uint8_t buf_num = Uart0_BufAvailable();
//     uint16_t time;
//     if (buf_num == 0)
//     {
//         return false;
//     }
//     for (time = 0; time < 5000; time++)
//     { /*大于1毫秒循环*/
//     }
//     if (Uart0_BufAvailable() > buf_num)
//     {
//         return false;
//     }
//     if (*str != NULL)
//     {
//         free(*str);
//     }
//     *str = (uint8_t *)malloc(sizeof(uint8_t) * (buf_num + 1));
//     for (i = 0; i < buf_num; i++)
//     {
//         (*str)[i] = BUF_TEMP[BUF_POINTER_BEGIN];
//         BUF_POINTER_BEGIN = (BUF_POINTER_BEGIN + 1) % BUF_SIZE;
//     }
//     (*str)[buf_num] = '\0';
//     return true;
// }

// #if (USCI0_Mode == Uart0)
// void Uart0_Interrupt() interrupt 7
// {
//     // receive
//     if (US0CON0 & 0x01)
//     {
//         if (!Uart0_BufOverflow())
//         {
//             BUF_TEMP[BUF_POINTER_END] = US0CON3;
//             BUF_POINTER_END = (BUF_POINTER_END + 1) % BUF_SIZE;
//         }
//         US0CON0 |= 0x01;
//     }
//     // send
//     if (US0CON0 & 0x02)
//     {
//         US0CON0 |= 0x02;
//         Uart0SendFlag = 1;
//     }
// }
